package com.fowo.api.service.handleWork.jindieEntity;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@NoArgsConstructor
@Data
public class apPayable {


    @JsonProperty("NeedReturnFields")
    private List<?> needReturnFields;
    @JsonProperty("SubSystemId")
    private String subSystemId;
    @JsonProperty("IsAutoAdjustField")
    private String isAutoAdjustField;
    @JsonProperty("NeedUpDateFields")
    private List<?> needUpDateFields;
    @JsonProperty("IsEntryBatchFill")
    private String isEntryBatchFill;
    @JsonProperty("NumberSearch")
    private String numberSearch;
    @JsonProperty("IgnoreInterationFlag")
    private String ignoreInterationFlag;
    @JsonProperty("ValidateFlag")
    private String validateFlag;
    @JsonProperty("IsDeleteEntry")
    private String isDeleteEntry;
    @JsonProperty("Model")
    private ModelDTO model;
    @JsonProperty("IsVerifyBaseDataField")
    private String isVerifyBaseDataField;
    @JsonProperty("IsControlPrecision")
    private String isControlPrecision;
    @JsonProperty("InterationFlags")
    private String interationFlags;

    @NoArgsConstructor
    @Data
    public static class ModelDTO {
        @JsonProperty("FISHookMatch")
        private Boolean fISHookMatch;
        @JsonProperty("FISBYIV")
        private Boolean fisbyiv;
        @JsonProperty("FDOCUMENTSTATUS")
        private String fdocumentstatus;
        @JsonProperty("FISTAX")
        private Boolean fistax;
        @JsonProperty("FEntityDetail")
        private List<FEntityDetailDTO> fEntityDetail;
        @JsonProperty("FSetAccountType")
        private String fSetAccountType;
        @JsonProperty("FDATE")
        private String fdate;
        @JsonProperty("FIsGeneratePlanByCostItem")
        private Boolean fIsGeneratePlanByCostItem;
        @JsonProperty("FISINVOICEARLIER")
        private Boolean fisinvoicearlier;
        @JsonProperty("FISTAXINCOST")
        private Boolean fistaxincost;
        @JsonProperty("FSUPPLIERID")
        private FSUPPLIERIDDTO fsupplierid;
        @JsonProperty("FCancelStatus")
        private String fCancelStatus;
        @JsonProperty("FSETTLEORGID")
        private FSETTLEORGIDDTO fsettleorgid;
        @JsonProperty("FID")
        private Integer fid;
        @JsonProperty("FsubHeadSuppiler")
        private FsubHeadSuppilerDTO fsubHeadSuppiler;
        @JsonProperty("FENDDATE_H")
        private String fenddateH;
        @JsonProperty("FBUSINESSTYPE")
        private String fbusinesstype;
        @JsonProperty("FCURRENCYID")
        private FCURRENCYIDDTO fcurrencyid;
        @JsonProperty("FISPRICEEXCLUDETAX")
        private Boolean fispriceexcludetax;
        @JsonProperty("FPAYORGID")
        private FPAYORGIDDTO fpayorgid;
        @JsonProperty("FsubHeadFinc")
        private FsubHeadFincDTO fsubHeadFinc;
        @JsonProperty("FISINIT")
        private Boolean fisinit;
        @JsonProperty("FBillTypeID")
        private FBillTypeIDDTO fBillTypeID;
        @JsonProperty("FISGENHSADJ")
        private Boolean fisgenhsadj;
        @JsonProperty("FWBOPENQTY")
        private Boolean fwbopenqty;

        @NoArgsConstructor
        @Data
        public static class FSUPPLIERIDDTO {
            @JsonProperty("FNumber")
            private String fNumber;
        }

        @NoArgsConstructor
        @Data
        public static class FSETTLEORGIDDTO {
            @JsonProperty("FNumber")
            private String fNumber;
        }

        @NoArgsConstructor
        @Data
        public static class FsubHeadSuppilerDTO {
            @JsonProperty("FTRANSFERID")
            private FTRANSFERIDDTO ftransferid;
            @JsonProperty("FORDERID")
            private FORDERIDDTO forderid;
            @JsonProperty("FChargeId")
            private FChargeIdDTO fChargeId;

            @NoArgsConstructor
            @Data
            public static class FTRANSFERIDDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }

            @NoArgsConstructor
            @Data
            public static class FORDERIDDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }

            @NoArgsConstructor
            @Data
            public static class FChargeIdDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }
        }

        @NoArgsConstructor
        @Data
        public static class FCURRENCYIDDTO {
            @JsonProperty("FNumber")
            private String fNumber;
        }

        @NoArgsConstructor
        @Data
        public static class FPAYORGIDDTO {
            @JsonProperty("FNumber")
            private String fNumber;
        }

        @NoArgsConstructor
        @Data
        public static class FsubHeadFincDTO {
            @JsonProperty("FISCARRIEDDATE")
            private Boolean fiscarrieddate;
            @JsonProperty("FMAINBOOKSTDCURRID")
            private FMAINBOOKSTDCURRIDDTO fmainbookstdcurrid;
            @JsonProperty("FACCNTTIMEJUDGETIME")
            private String faccnttimejudgetime;
            @JsonProperty("FEXCHANGETYPE")
            private FEXCHANGETYPEDTO fexchangetype;
            @JsonProperty("FExchangeRate")
            private Integer fExchangeRate;

            @NoArgsConstructor
            @Data
            public static class FMAINBOOKSTDCURRIDDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }

            @NoArgsConstructor
            @Data
            public static class FEXCHANGETYPEDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }
        }

        @NoArgsConstructor
        @Data
        public static class FBillTypeIDDTO {
            @JsonProperty("FNUMBER")
            private String fnumber;
        }

        @NoArgsConstructor
        @Data
        public static class FEntityDetailDTO {
            @JsonProperty("FMaterialDesc")
            private String fMaterialDesc;
            @JsonProperty("FISOUTSTOCK")
            private Boolean fisoutstock;
            @JsonProperty("FIsFree")
            private Boolean fIsFree;
            @JsonProperty("FTAILDIFFFLAG")
            private Boolean ftaildiffflag;
            @JsonProperty("FStockUnitId")
            private FStockUnitIdDTO fStockUnitId;
            @JsonProperty("FMATERIALID")
            private FMATERIALIDDTO fmaterialid;
            @JsonProperty("FPRICEUNITID")
            private FPRICEUNITIDDTO fpriceunitid;
            @JsonProperty("FPriceBaseDen")
            private Integer fPriceBaseDen;
            @JsonProperty("FStockBaseNum")
            private Integer fStockBaseNum;
            @JsonProperty("FINCLUDECOST")
            private Boolean fincludecost;

            @NoArgsConstructor
            @Data
            public static class FStockUnitIdDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }

            @NoArgsConstructor
            @Data
            public static class FMATERIALIDDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }

            @NoArgsConstructor
            @Data
            public static class FPRICEUNITIDDTO {
                @JsonProperty("FNumber")
                private String fNumber;
            }
        }
    }
}
